//
//  YGEmoticonManager.swift
//  表情键盘
//
//  Created by liyonggui on 16/5/23.
//  Copyright © 2016年 liyonggui. All rights reserved.
//

import UIKit

/// 图片的bundle地址
let emoticonBundlePath = NSBundle.mainBundle().pathForResource("Emoticons", ofType: "bundle")!

/// 单例对象，获取所有表情包模型
class YGEmoticonManager: NSObject {
    
    /// 单例
    static let sharedManager: YGEmoticonManager = YGEmoticonManager()
    
    /// 模型保存的沙盒路径
    private let emoticonsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! + "/emoticons.plist"
    
    /// 所有表情包模型
    lazy var emoticonPackageModels:[YGEmoticonPackageModel] = self.loadEmoticonPackageModels()
    
    private func loadEmoticonPackageModels() -> [YGEmoticonPackageModel] {
        let recentPageModel = YGEmoticonPackageModel(id: "", group_name_cn: "最近", emoticons: loadRecentEmoticons())
        let defaultModel = loadEmoticonPackageModel("com.sina.default")
        let emoji = loadEmoticonPackageModel("com.apple.emoji")
        let lxh = loadEmoticonPackageModel("com.sina.lxh")
        
        return [recentPageModel, defaultModel, emoji, lxh]
    }
    
    ///  加载表一个表情包
    ///
    ///  - parameter id: 表情包文件夹名称
    ///
    ///  - returns: 表情包模型
    private func loadEmoticonPackageModel(id: String) -> YGEmoticonPackageModel {
        
        // 拼接info.plist路径
        let infoPath = emoticonBundlePath + "/" + id + "/info.plist"
        
        // 读取info.plist里面的内容
        let infoDic = NSDictionary(contentsOfFile: infoPath)!
        
        // 获取infoDic内容
        let group_name_cn = infoDic["group_name_cn"] as! String
        let emoticonsArr = infoDic["emoticons"] as! [[String: String]]
        
        // 定义空数组存放表情模型
        var emoticonModels = [YGEmoticonModel]()
        
        // 遍历emoticonModels
        for dic in emoticonsArr {
            // 自动转模型（表情模型）
            let emoticonModel = YGEmoticonModel(dic: dic, id: id)
            emoticonModels.append(emoticonModel)
        }
        // 返回表情包模型
        return YGEmoticonPackageModel(id: id, group_name_cn: group_name_cn, emoticons: emoticonModels)
    }
    
    func addRecentEmoticon(emoticonModel: YGEmoticonModel) {
        // 获取最近这组的第一页数据
        var pageEmoticon = emoticonPackageModels[0].pageEmoticons[0]
        var sameEmoticon: YGEmoticonModel?
        // 判断是否已经存在
        for e in pageEmoticon {
            // emoji表情判断字符串
            if (e.emoji != nil && e.emoji == emoticonModel.emoji) || (e.chs != nil && e.chs == emoticonModel.chs) {
                sameEmoticon = e
                break
            }
        }
        // 已经存在就删除
        if let se = sameEmoticon {
            let index = pageEmoticon.indexOf(se)
            pageEmoticon.removeAtIndex(index!)
        }
        // 添加到最前
        pageEmoticon.insert(emoticonModel, atIndex: 0)
        
        // 判断是否超过20个
        if pageEmoticon.count > YGEmoticonNumberOfPage {
            pageEmoticon.removeLast()
        }
        // 赋值回去
        emoticonPackageModels[0].pageEmoticons[0] = pageEmoticon
        
        // 保存模型到沙盒
        NSKeyedArchiver.archiveRootObject(pageEmoticon, toFile: emoticonsPath)
    }
    
    /// 解档，加载最近表情模型
    private func loadRecentEmoticons() -> [YGEmoticonModel] {
        if let emoticons = NSKeyedUnarchiver.unarchiveObjectWithFile(emoticonsPath) as? [YGEmoticonModel] {
            // 加载表情数组
            return emoticons
        } else {
            // 没加载
            return [YGEmoticonModel]()
        }
        
    }

}







































